home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- *
- * OSLClassApplication.c
- *
- * OSL support for the cApplication Apple Event Registry object
- *
- ****************************************************************************/
-
- #include "Sketch.h"
-
- #include "OSLClassApplication.h"
-
- #include "AERCoreSuite.h"
- #include "AppleEvent.h"
- #include "OSLHelpers.h"
-
- #include "DocumentADT.h" // for CountDocuments()
- #include "WindowUtils.h" // for CountWindows()
-
- #include "StringUtils.h" // for VersionString()
-
- // ----------------------------------------------------------------------------
- // Core Suite Object Event handlers
- // ----------------------------------------------------------------------------
-
- static OSErr HandleClose (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandleCount (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandleDataSize (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandleDelete (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandleDuplicate (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandleExists (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandleGetData (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandleMake (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandleMove (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandleOpen (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandlePrint (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandleQuit (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandleSave (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
- static OSErr HandleSetData (AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply);
-
- // ----------------------------------------------------------------------------
- // Core Suite Object Accessor functions
- // ----------------------------------------------------------------------------
-
- static pascal OSErr
- PropertyFromApplicationAccessor(
- DescType desiredClass,
- AEDesc *containerToken,
- DescType containerClass,
- DescType keyForm,
- AEDesc *keyData,
- AEDesc *resultToken,
- long refCon);
-
- static OSErr GetDataFromObject (const AEDesc *token, AEDesc *data);
- static OSErr SetDataForObject (const AEDesc *token, AEDesc *data);
-
- static Boolean CanGetProperty (DescType propertyCode);
- static Boolean CanSetProperty (DescType propertyCode);
-
- /*****************************************************************************
- *
- * ApplicationEventDispatcher
- *
- * Handles all OSL messages that cApplication should handle
- *
- *****************************************************************************/
-
- OSErr
- ApplicationEventDispatcher(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply, long refcon)
- {
- #pragma unused (refcon)
-
- OSErr error = noErr;
-
- AEEventID eventID;
- OSType typeCode;
- Size actualSize = 0L;
-
- // Get the event ID
-
- error = AEGetAttributePtr(appleEvent,
- keyEventIDAttr,
- typeType,
- &typeCode,
- (Ptr)&eventID,
- sizeof(eventID),
- &actualSize);
- if (error != noErr) {
- return error;
- }
-
- switch (eventID) {
-
- case kAEClone:
- error = HandleDuplicate(token, appleEvent, reply);
- break;
-
- case kAEClose:
- error = HandleClose(token, appleEvent, reply);
- break;
-
- case kAECountElements:
- error = HandleCount(token, appleEvent, reply);
- break;
-
- case kAECreateElement:
- error = HandleMake(token, appleEvent, reply);
- break;
-
- case kAEDelete:
- error = HandleDelete(token, appleEvent, reply);
- break;
-
- case kAEDoObjectsExist:
- error = HandleExists(token, appleEvent, reply);
- break;
-
- case kAEGetData:
- error = HandleGetData(token, appleEvent, reply);
- break;
-
- case kAEGetDataSize:
- error = HandleDataSize(token, appleEvent, reply);
- break;
-
- case kAEMove:
- error = HandleMove(token, appleEvent, reply);
- break;
-
- case kAEOpen:
- error = HandleOpen(token, appleEvent, reply);
- break;
-
- case kAEPrint:
- error = HandlePrint(token, appleEvent, reply);
- break;
-
- case kAEQuitApplication:
- error = HandleQuit(token, appleEvent, reply);
- break;
-
- case kAESave:
- error = HandleSave(token, appleEvent, reply);
- break;
-
- case kAESetData:
- error = HandleSetData(token, appleEvent, reply);
- break;
-
- default:
- error = errAEEventNotHandled;
- break;
- }
-
- if (error != noErr)
- PutReplyErrorNumber(reply, error);
-
- return error;
- }
-
- #pragma mark -
- // ----------------------------------------------------------------------------
- // Core Suite Object Event handlers
- // ----------------------------------------------------------------------------
-
- static OSErr
- HandleClose(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- #pragma unused (token, reply)
-
- OSErr error = noErr;
-
- DescType typeCode = 0L;
-
- AEDesc saving = {typeNull, nil};
- AEDesc savingIn = {typeNull, nil};
-
- AEDesc *ptrToSaving = NULL;
- AEDesc *ptrToSavingIn = NULL;
-
- // Extract the [saving yes/no/ask] optional parameter, if present
-
- error = AEGetParamDesc(appleEvent,
- keyAESaveOptions,
- typeWildCard,
- &saving);
-
- if (error != errAEDescNotFound && error != noErr)
- goto Cleanup;
-
- ptrToSaving = &saving;
-
- // Extract the [saving in <alias>] optional parameter, if present
-
- error = AEGetParamDesc(appleEvent,
- keyAEFile,
- typeWildCard,
- &savingIn);
-
- if (error != errAEDescNotFound && error != noErr)
- goto Cleanup;
-
- ptrToSavingIn = &savingIn;
-
- // Check for any required parameters we may have missed
-
- error = CheckForUnusedParameters(appleEvent);
- if (error != noErr)
- goto Cleanup;
-
- // Now, do the application-related work
- SysBeep(2);
-
-
- Cleanup:
- AEDisposeDesc(&saving);
- AEDisposeDesc(&savingIn);
-
- return error;
- }
-
- // ----------------------------------------------------------------------------
-
- static OSErr
- HandleCount(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- OSErr error = noErr;
- long numberOfObjects = 0L;
-
- DescType objectClass;
-
- // Get the class of object that we will count
-
- error = GetObjectClassFromAppleEvent(appleEvent, &objectClass);
-
- if (error)
- goto CleanUp;
-
- // Make sure we got & handled all of the required paramters
-
- error = CheckForUnusedParameters(appleEvent);
- if (error)
- goto CleanUp;
-
- // Send back the results
-
- if (reply->dataHandle)
- {
- if (TokenContainsTokenList(token))
- {
- error = AECountItems(token, &numberOfObjects);
- if (error == noErr)
- error = AEPutParamPtr(reply, keyAEResult,
- typeLongInteger,
- (Ptr)&numberOfObjects,
- sizeof(long));
- }
- else
- {
- switch (objectClass)
- {
- case cDocument:
- numberOfObjects = CountDocuments(GetDocumentList());
- error = AEPutParamPtr(reply,
- keyAEResult,
- typeLongInteger,
- (Ptr)&numberOfObjects,
- sizeof(long));
- break;
-
- case cWindow:
- numberOfObjects = CountWindows();
- error = AEPutParamPtr(reply,
- keyAEResult,
- typeLongInteger,
- (Ptr)&numberOfObjects,
- sizeof(long));
- break;
-
- default:
- error = errAEEventNotHandled;
- break;
- }
- }
- }
-
- CleanUp:
-
- return error;
-
- }
-
- // ----------------------------------------------------------------------------
-
- static OSErr
- HandleDataSize(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- OSErr error = noErr;
- AEDesc data = {typeNull, nil};
- long size = 0L;
-
- // First, get the data
- error = HandleGetData(token, appleEvent, reply);
-
- // now, extract it from the reply
-
- if (error == noErr)
- error = AEGetKeyDesc(reply, keyDirectObject, typeWildCard, &data);
-
- if (error == noErr)
- {
- if (data.dataHandle != nil)
- {
- size = GetHandleSize(data.dataHandle);
- }
- error = AEPutParamPtr(reply,
- keyAEResult,
- typeLongInteger,
- (Ptr)&size,
- sizeof(long));
- }
-
- if (error != noErr)
- PutReplyErrorNumber(reply, error);
-
- AEDisposeDesc(&data);
-
- return error;
-
- }
-
- // ----------------------------------------------------------------------------
- // All attempts to delete an empty list are handled here
- // Application contains documents and windows, and they can't be deleted
-
- static OSErr
- HandleDelete(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- #pragma unused (appleEvent, reply)
-
- OSErr error = noErr;
-
- if (TokenContainsTokenList(token))
- {
- long numItems;
-
- AECountItems(token, &numItems);
-
- if (numItems > 0)
- error = errAEEventNotHandled;
- }
-
- return error;
- }
-
- // ----------------------------------------------------------------------------
-
- static OSErr
- HandleDuplicate(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- #pragma unused (token, appleEvent, reply)
-
- OSErr error = errAEEventNotHandled;
-
- return error;
- }
-
- // ----------------------------------------------------------------------------
- // If <referenceToObject> exists...
- // The AEResolve() function in AERCoreSuite.c will already have filtered
- // out all cases where the object did not exist, so this function should
- // always return TRUE.
-
- static OSErr
- HandleExists(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- #pragma unused (token, appleEvent)
-
- OSErr error = noErr;
- Boolean foundIt = true;
-
- error = AEPutParamPtr(reply,
- keyAEResult,
- typeBoolean,
- (Ptr)&foundIt,
- sizeof(Boolean));
-
- return error;
- }
-
- // ----------------------------------------------------------------------------
-
- static OSErr
- HandleGetData(AEDesc *tokenOrTokenList, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- #pragma unused (appleEvent)
-
- OSErr error = noErr;
- AEDesc data = {typeNull, nil};
- DescType propertyCode;
- long numItems;
-
- switch (tokenOrTokenList->descriptorType)
- {
- case cProperty:
- propertyCode = ExtractPropertyCodeFromToken(tokenOrTokenList);
-
- error = GetDataFromObject(tokenOrTokenList, &data);
- if (error == noErr)
- error = AEPutKeyDesc(reply, keyDirectObject, &data); // return the requested data
- break;
-
- case typeAEList:
- // Usually, this should be an EMPTY list
- error = AECountItems(tokenOrTokenList, &numItems);
- error = AEPutKeyDesc(reply, keyDirectObject, tokenOrTokenList);
- break;
-
- default:
- break;
- }
-
- AEDisposeDesc(&data);
-
- return error;
- }
-
- // ----------------------------------------------------------------------------
-
- static OSErr
- HandleMake(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- #pragma unused (token, appleEvent, reply)
-
- OSErr error = errAEEventNotHandled;
-
- return error;
- }
-
- // ----------------------------------------------------------------------------
-
- static OSErr
- HandleMove(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- #pragma unused (token, appleEvent, reply)
-
- OSErr error = errAEEventNotHandled;
-
- return error;
- }
-
- // ----------------------------------------------------------------------------
-
- static OSErr
- HandleOpen(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- #pragma unused (token, appleEvent, reply)
-
- OSErr error = errAEEventNotHandled;
-
- return error;
- }
-
- // ----------------------------------------------------------------------------
-
- static OSErr
- HandlePrint(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- #pragma unused (token, appleEvent, reply)
-
- OSErr error = errAEEventNotHandled;
-
- return error;
- }
-
- // ----------------------------------------------------------------------------
-
- static OSErr
- HandleQuit(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- #pragma unused (token, appleEvent, reply)
-
- OSErr error = errAEEventNotHandled;
-
- return error;
- }
-
- // ----------------------------------------------------------------------------
-
- static OSErr
- HandleSave(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- #pragma unused (token, appleEvent, reply)
-
- OSErr error = errAEEventNotHandled;
-
- return error;
- }
-
- // ----------------------------------------------------------------------------
-
- static OSErr
- HandleSetData(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
- {
- OSErr error = noErr;
- AEDesc tokenData = {typeNull, nil};
-
- DescType propertyCode;
-
- if (token->descriptorType == cProperty)
- {
- propertyCode = ExtractPropertyCodeFromToken(token);
-
- if (CanSetProperty(propertyCode))
- {
- // only the clipboard property is writeable
- // the clipboard data should be in a list, so we extract that list
-
- switch (propertyCode)
- {
- case pClipboard:
- error = AEGetKeyDesc(appleEvent, keyAEData, typeAEList, &tokenData);
- if (error == noErr)
- error = SetDataForObject(token, &tokenData);
- if (error == noErr)
- error = AEPutKeyDesc(reply, keyDirectObject, &tokenData); // return the requested data
- break;
-
- default:
- error = errAENotModifiable; // "Can't set xxx to nnn"
- break;
- }
- }
- else
- {
- error = errAENotModifiable;
- }
- }
- else
- {
- error = errAEEventNotHandled;
- }
-
- AEDisposeDesc(&tokenData);
-
- return error;
- }
-
- #pragma mark -
- // -----------------------------------------------------------------------------
- // Object Accessors
- //------------------------------------------------------------------------------
-
- OSErr
- InstallApplicationAccessors(void)
- {
-
- OSErr error;
-
- error = AEInstallObjectAccessor(cProperty,
- typeNull,
- NewOSLAccessorProc(PropertyFromApplicationAccessor),
- 0L,
- false);
- return error;
- }
-
- #pragma mark -
- //----------------------------------------------------------------------------------//
- // Return a token that contains the property type and nil to represent the null //
- // container (the application). //
- //----------------------------------------------------------------------------------//
-
- pascal OSErr
- PropertyFromApplicationAccessor( DescType desiredClass, // cProperty
- AEDesc* containerToken,
- DescType containerClass, // cApplication
- DescType keyForm,
- AEDesc* keyData,
- AEDesc* resultToken,
- long refCon)
- {
- #pragma unused (desiredClass, containerToken, containerClass, keyForm, refCon)
-
- OSErr error;
- CoreTokenRecord token;
- DescType requestedProperty = **(DescType**)keyData->dataHandle;
-
- InitCoreTokenRecord(&token);
-
- token.dispatchClass = cApplication;
- token.objectClass = cApplication;
- token.propertyCode = requestedProperty;
-
- if (CanGetProperty(requestedProperty) || CanSetProperty(requestedProperty))
- {
- error = AECreateDesc(cProperty, (Ptr)&token, sizeof(CoreTokenRecord), resultToken);
- }
- else
- {
- error = errAEEventNotHandled;
- }
-
- return error;
- }
-
- //----------------------------------------------------------------------------------
- // GetDataFromObject
- //----------------------------------------------------------------------------------
-
- static OSErr
- GetDataFromObject(const AEDesc *token, AEDesc *data)
- {
-
- OSErr error = noErr;
-
- Str255 applicationName = "\p";
- Str255 versionString;
-
- ProcessSerialNumber applicationProcessNumber;
- ProcessInfoRec applicationInfo;
- FSSpec appFSSpec;
-
- Boolean isFrontProcess = !IsCurrentProcessInBackground();
-
- DescType aDescType = cApplication;
-
- long documentNumber = 0L;
- unsigned long elementNumber = 0L;
-
- DocumentReference document = nil;
- ElementReference element = nil;
-
- Boolean usePropertyCode = ExtractUsePropertyCodeFromToken(token);
- DescType propertyCode;
-
- long free;
- long contiguous;
- unsigned long ticks;
-
- if (usePropertyCode)
- {
- error = GetCurrentProcess(&applicationProcessNumber);
-
- if (error == noErr)
- {
- applicationInfo.processInfoLength = sizeof(ProcessInfoRec);
- applicationInfo.processName = applicationName;
- applicationInfo.processAppSpec = &appFSSpec;
- error = GetProcessInformation(&applicationProcessNumber, &applicationInfo);
- }
-
- versionString[0] = 0;
- VersionString(2, versionString);
-
- PurgeSpace(&free, &contiguous);
-
- ticks = TickCount();
-
- propertyCode = ExtractPropertyCodeFromToken(token);
-
- switch (propertyCode)
- {
- case pProperties:
- error = AECreateList(NULL, 0L, true, data);
- if (error != noErr)
- goto CleanUp;
-
- error = AEPutKeyPtr(data, pObjectType, typeType, &aDescType, sizeof(DescType));
-
- error = AEPutKeyPtr(data, pName, typeChar, &applicationName[1], applicationName[0]);
-
- error = AEPutKeyPtr(data, pVersion, typeChar, &versionString[1], versionString[0]);
-
- error = AEPutKeyPtr(data, pIsFrontProcess, typeBoolean, &isFrontProcess, sizeof(Boolean));
-
- error = AEPutKeyPtr(data, pFreeMemory, typeLongInteger, &free, sizeof(long));
-
- error = AEPutKeyPtr(data, pLargestFreeBlock, typeLongInteger, &contiguous, sizeof(long));
-
- error = AEPutKeyPtr(data, pTicks, typeLongInteger, &ticks, sizeof(long));
-
- break;
-
- case pBestType:
- case pClass:
- case pDefaultType:
- case pObjectType:
- error = AECreateDesc(typeType, &aDescType, sizeof(DescType), data);
- break;
-
- case pName:
- error = AECreateDesc(typeChar, &applicationName[1], applicationName[0], data);
- break;
-
- case pVersion:
- error = AECreateDesc(typeChar, &versionString[1], versionString[0], data);
- break;
-
- case pIsFrontProcess:
- error = AECreateDesc(typeBoolean, &isFrontProcess, sizeof(Boolean), data);
- break;
-
- case pFreeMemory:
- error = AECreateDesc(typeLongInteger, &free, sizeof(long), data);
- break;
-
- case pLargestFreeBlock:
- error = AECreateDesc(typeLongInteger, &contiguous, sizeof(long), data);
- break;
-
- case pTicks:
- error = AECreateDesc(typeLongInteger, &ticks, sizeof(long), data);
- break;
-
- case pClipboard:
- {
- // Return all of the items currently on the clipboard.
- // The returned information is an AEList, and each data type
- // on the scrap gets its own entry in the list
- // Since the OS doesn't supply the tools for getting all
- // of the types in the scrap, we have to scan the scrap ourselves
-
- char *scrapPtr;
- char *scrapEnd;
- PScrapStuff scrapInfo;
- OSType itemType;
- long itemLength;
- long index;
-
- error = AECreateList(NULL, 0, false, data);
- if (error != noErr)
- break;
-
- error = LoadScrap(); // Make sure the scrap is in memory, not on disk.
- if (error != noErr)
- break;
-
- scrapInfo = InfoScrap(); // Get the base address of the scrap in RAM
- MoveHHi(scrapInfo->scrapHandle);
- HLock (scrapInfo->scrapHandle); // ...and lock it
-
- scrapPtr = (char *)*scrapInfo->scrapHandle;
- scrapEnd = scrapPtr + scrapInfo->scrapSize;
-
- // scan the scrap in memory and extract each scrap type
-
- index = 1;
- while (scrapPtr < scrapEnd)
- {
- itemType = *(OSType *)scrapPtr;
- scrapPtr += sizeof(itemType);
- itemLength = *(long *)scrapPtr;
- scrapPtr += sizeof(itemLength);
-
- // Move this information into the next entry on the list
- error = AEPutPtr(data, index, itemType, scrapPtr, itemLength);
- if (error != noErr)
- return error;
-
- index++;
-
- // Adjust the pointer to the start of the next item
-
- if (itemLength & 1)
- itemLength++; // If it's odd, make it even
-
- scrapPtr += itemLength;
- }
- HUnlock (scrapInfo->scrapHandle);
- }
- break;
-
- default:
- error = errAECantSupplyType;
- }
- }
-
- CleanUp:
-
- return error;
- }
-
- //----------------------------------------------------------------------------------
- // SetDataForObject
- //----------------------------------------------------------------------------------
- // Assumption: HandleSetData() has already filtered out all attempts
- // to write to a read-only property.
-
- static OSErr
- SetDataForObject(const AEDesc *token, AEDesc *data)
- {
-
- OSErr error = noErr;
-
- long numItems;
- long index;
- AEDesc currentItemDesc = {typeNull, nil};
- AEKeyword theAEKeyword;
-
- Boolean usePropertyCode = ExtractUsePropertyCodeFromToken(token);
- DescType propertyCode;
-
- if (usePropertyCode)
- {
- propertyCode = ExtractPropertyCodeFromToken(token);
-
- switch (propertyCode)
- {
- // the clipboard is the only writeable property for the application object
- case pClipboard:
- // The data should be an AE list containing a series of things to be placed on the
- // clipboard. The data type of each item is also the clipboard type for that data
-
- error = ZeroScrap();
- if (error != noErr)
- break;
-
- AECountItems(data, &numItems);
-
- // Copy each item onto the clipboard
-
- for (index = 1; index <= numItems; index++)
- {
- error = AEGetNthDesc(data, index, typeWildCard, &theAEKeyword, ¤tItemDesc);
- if (error != noErr) {
- if (currentItemDesc.dataHandle != NULL)
- AEDisposeDesc(¤tItemDesc);
- break;
- }
- HLock(currentItemDesc.dataHandle);
- error = PutScrap(GetHandleSize(currentItemDesc.dataHandle),
- currentItemDesc.descriptorType,
- *currentItemDesc.dataHandle);
-
- AEDisposeDesc(¤tItemDesc);
- currentItemDesc.dataHandle = nil;
- }
- break;
-
- default:
- error = errAENotModifiable;
- }
- }
-
- return error;
- }
-
- //----------------------------------------------------------------------------------
- // creates an ospec for the each selected object in the frontmost ad document
- // and inserts each such ospec into a list and returns in in the data parameter.
-
- static OSErr
- GetApplicationSelection(const AEDesc *token, AEDesc *data)
- {
- #pragma unused (token, data)
-
- OSErr error = noErr;
- /*
- DocumentReference document;
- ElementReference element;
- AEDesc ospec = {typeNull, nil};
-
- // Make sure we have at least one document
-
- document = GetFrontDocument(GetDocumentList());
-
- if (document == nil)
- {
- error = errAENoSuchObject;
- goto CleanUp;
- }
-
- // Make sure that document has at least one selected element
-
- element = GetFirstSelectedElement(GetDocumentElementList(document));
-
- if (element == nil)
- {
- error = errAENoUserSelection;
- goto CleanUp;
- }
-
- error = AECreateList(nil, (Size)0, false, data); // create an empty list to hold the ospec(s)
-
- if (error != noErr)
- goto CleanUp;
-
- while (error == noErr && element != nil)
- {
- error = CreateElementOSpec(document, element, &ospec);
-
- if (error == noErr)
- {
- error = AEPutDesc(data, 0, &ospec);
- AEDisposeDesc(&ospec);
- }
-
- element = GetNextSelectedElement(element);
- }
-
-
- CleanUp:
-
- AEDisposeDesc(&ospec);
- */
-
- return error;
- }
-
- #pragma mark -
- //----------------------------------------------------------------------------------
-
- static Boolean
- CanGetProperty(DescType propertyCode)
- {
- Boolean result = false;
-
- switch (propertyCode)
- {
- // Properties we can get:
-
- case pBestType:
- case pClass:
- case pDefaultType:
- case pObjectType:
-
- case pProperties:
-
- case pFreeMemory:
- case pLargestFreeBlock:
- case pTicks:
-
- case pIsFrontProcess:
- case pName:
- case pVersion:
- case pInsertionLoc:
- case pSelection:
- case pUserSelection:
- result = true;
- break;
-
- // Properties we should be able to get, but they're not implemented yet:
-
- // Properties we should not be able to get:
-
- default:
- result = false;
- break;
- }
-
- return result;
- }
-
-
- //----------------------------------------------------------------------------------
-
- static Boolean
- CanSetProperty(DescType propertyCode)
- {
- Boolean result = false;
-
- switch (propertyCode)
- {
- // Properties we can set:
-
- case pClipboard:
- result = true;
- break;
-
- // Properties we should be able to set, but they're not implemented yet:
-
-
- // Properties that are read-only
-
- case pBestType:
- case pClass:
- case pDefaultType:
- case pObjectType:
-
- case pProperties:
-
- case pFreeMemory:
- case pLargestFreeBlock:
- case pTicks:
-
- case pIsFrontProcess:
- case pName:
- case pVersion:
- case pInsertionLoc:
- case pSelection:
- case pUserSelection:
- default:
- result = false;
- break;
- }
-
- return result;
- }
-
-
- //----------------------------------------------------------------------------------
-
-
-
-
-